package Test;
import java.util.*;
public class Test07 {

        static HashMap<Integer,Integer> map = new HashMap<>();
        static int max = 0;
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int Q = sc.nextInt();
            int seed = sc.nextInt();
            // seed = seed ^(seed <<15);
            // seed = seed ^(seed >>15);
            // seed = seed ^(seed <<1);
            // seed = seed ^(1 <<15);
            // int Q2 = Q;
            while(Q>0){
                seed = seed ^(seed <<15);
                seed = seed ^(seed >>5);
                seed = seed ^(seed <<1);
                seed = seed %(1 <<15);
                int op = (seed ^(seed << 7) ^(seed >>5)) % 3 + 1;
                int m = (seed ^(seed << 6) ^(seed >>10)) % Q + 1;
                int x = (seed ^(seed << 5) ^(seed <<9) ^(seed >> 6)) % 10 + 1;
                if(op == 1) {
                    func1(x);
                }else if(op ==2){
                    func2(m,x);
                }else{
                    func3();
                }
                Q--;
            }
            System.out.println(max);
        }
        static void func1(int x){
            map.put(x,map.getOrDefault(x,0)+1);
            // System.out.println("func1");
        }
        static void func2(int m,int x){
            if(map.getOrDefault(x,0) == 0 || !map.containsKey(x)) {
                // System.out.println("func2");
                return;
            }
            int r = map.get(x);
            if(r <= m) map.put(x,0);
            else map.put(x,r-m);
            // System.out.println("func2");
        }
        static void func3(){
            int max2 = 0;
            int min2 = Integer.MAX_VALUE;
            for(Integer key:map.keySet()){
                if(map.containsKey(key) && map.get(key) != 0){
                    max2 = Math.max(max2,key);
                    min2 = Math.min(min2,key);
                }

            }
            // System.out.println("func3");
            max = Math.max(max,max2-min2);
        }

}
